/**
 * @author Tz, hxj
 * @date 2024/01/22 15:03
 * @Description 这里放定时执行的任务
 */
package com.bright.cwduijie.duijie.task;


import com.bright.cwduijie.duijie.manager.DuijieManager;
import com.bright.cwduijie.duijie.pojo.command.BuildCommand;
import com.bright.cwduijie.duijie.pojo.command.DuijieCommand;
import com.bright.cwduijie.duijie.service.DuijieService;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.YearMonth;

@Slf4j
@Component
public class TimedTask {

    @Autowired
    public DuijieService duijieService;

    @Autowired
    public DuijieManager duijieManager;

    @Scheduled(cron = "${scheduled.queryTaskCron}")
    public void autoCheckAsyncStatus() {
        duijieService.checkAsyncTasks();
//        log.debug("自动刷新异步任务状态 执行完毕！");
        duijieService.checkBatchIfAllEnd();
//        log.debug("检查所有批次是否执行成功 执行完毕！");

    }

    @Scheduled(cron = "${scheduled.startNextBatchCron}")
    public void autoStartNextBatch() {
//        log.debug("开始进入autoStartNextBatch");
        duijieService.startNextBatch();
//
//        // 20240722 在这里刷新扫描duijie_id_taskId表 把sjjhbz写入到每个中间表
////        duijieManager.saveSjjhbzToDataTable();
//        log.debug("自动启动下一批次 执行完毕！");
    }

    /**
     * 自动调用存储过程生成数据
     */
    @Scheduled(cron = "${scheduled.buildCron}")
    public void autoBuild() {
        // 20240717 取消自动生成数据
//        duijieService.build(new BuildCommand(null, null, null, null));
//        log.debug("自动调用存储过程生成 执行完毕！");
    }

    /**
     * 自动调用对接的定时任务
     */
    @Scheduled(cron = "${scheduled.startCron}")
    public void autoStart() {
        // 20240717 每天自动对接时 排除掉有正在等待结果的数据的账套
//        String[] accSets = duijieService.getNeedDuijieAccSetsExceptExecuting();
        // 20240731 由于取消了分批对接 不再考虑这个问题 不指定账套即直接对接所有账套的数据

        // v1.6.8 自动重推只重推上个月的
        YearMonth lastYearMonth = YearMonth.now().plusMonths(-1);

        try {
//            duijieService.duijie(new DuijieCommand(lastYearMonth.getYear(), lastYearMonth.getMonthValue(), null));
            // v1.6.14
            duijieService.startByOnlyOneBatch(new DuijieCommand(lastYearMonth.getYear(), lastYearMonth.getMonthValue(), null));
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
//        log.debug("自动开始对接 执行完毕！");
    }

    /**
     * 自动将任务状态值写回到各张中间表
     */
    @Scheduled(cron = "${scheduled.syncResultCron:0 0/5 * * * *}")
    public void autoSyncTaskResults() {
        log.debug("自动开始同步任务状态");
        duijieService.syncTaskResultToDataTables();
        // 自动处理固定资产
//        duijieService.autoProcessFixedAssetsError();
    }

}